草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 紧密物理和碰撞循环中的缓存友好内存访问

我正在编写一个物理引擎,并且很难找到设计数据存储的好方法。我想要的功能:有一个代表PhysicsBody的类有一个代表碰撞体积的类(比方说一个盒子)每个物理体都可以附加一个碰撞体可能有没有碰撞体的物理体可选:没有物理体的CollisionVolume。(想想触发音量)现在我基本上有两个循环。一个更新模拟中的物理体。它更新它们的位置/速度/旋转。第二个循环对所有碰撞体执行碰撞检测。它只是一个嵌套的for循环,用于检查每对碰撞体积之间的碰撞。(我知道它可以做得更好,但这是一个单独的主题)我知道理想的方式是将对象存储在连续的数组中。std::vectorm_bodies;std::vecto

c++ - Lua C API 内存泄漏? (valgrind)

我正在尝试编写一个嵌入了Lua的C程序。而且,我尝试了一个非常简单的程序来启动,它只是创建Lua上下文,然后销毁它:#include#include#include#includeextern"C"{#include#include#include}intmain(intargc,char*argv[]){lua_State*L=lua_open();luaL_openlibs(L);lua_close(L);fprintf(stderr,"%s:%d\n",__FILE__,__LINE__);return(0);}我是这样编译的:(我实际上使用的是Torch7,所以..)g++-c

c++ - 原子访问 C++11 和 OpenMP 中的非原子内存位置?

与C++11相比,OpenMP从内存操作而非变量的角度处理原子性。例如,这允许在编译时对存储在大小未知的vector中的整数使用原子读/写:std::vectorv;//non-atomicaccess(e.g.,inasequentialregion):v.resize(n);...v.push_back(i);...//atomicaccessinamulti-threadedregion:#pragmaompatomicwrite//seq_cstv[k]=...;#pragmaompatomicread//seq_cst...=v[k];在C++11中,这是不可能实现的。我们可

c++ valgrind在hello world中显示内存泄漏

这个问题在这里已经有了答案:PRE-2016Valgrind:Memorystillreachablewithtrivialprogramusing(3个答案)关闭4年前。我的程序代码是#includeintmain(intargc,constchar*argv[]){std::cout我是用flags编译的-Wpedantic-pedantic-errors-std=c++11-g-Wall-Wextra在上面运行Valgrind,看到一些奇怪的东西,这个简单的程序有内存泄漏,valgrind--leak-check=full--show-leak-kinds=all命令的输出是==

c++ - 了解 C++ 中放宽的内存顺序

std::atomicunique_ids;voidfoo(){inti=unique_ids.fetch_add(1,std::memory_order_relaxed);std::coutthreads;for(inti=0;i我的目标是使用atomic为并发程序生成唯一的id,但我不关心顺序。对于上面的代码,我的理解是foo中的输出值应该是不同的,尽管它们的顺序不保证。我对上面的代码进行了一百次测试,所有结果都符合我的预期。我是原子/内存顺序的初学者,谁能帮助我阐明我的理解?提前致谢。爱民附言我想指出这个问题与c++,std::atomic,whatisstd::memory_o

c++ - CRTP 复制方法警告潜在的内存泄漏

我有一个对象层次结构,需要能够从基类克隆对象。我遵循了典型的CRTP模式,除了我还希望能够在直接对子类调用copy时返回子类。为此,我遵循了此处的建议:https://stackoverflow.com/a/30252692/1180785它似乎工作正常,但Clang警告我有潜在的内存泄漏。我已将代码缩减为这个MCVE:templateclassCRTP{protected:virtualCRTP*internal_copy(void)const{returnnewT(static_cast(*this));}public:T*copy(void)const{returnstatic_

c++ - 为什么 C++ 标准特别允许关于具有不同访问说明符的类数据成员的内存布局的余地?

C++11标准要求对类的非静态数据成员在内存中进行排序,但随后专门为具有不同访问说明符的成员开辟了一个豁免。为什么?§9.2.13Nonstaticdatamembersofa(non-union)classwiththesameaccesscontrol(Clause11)areallocatedsothatlatermembershavehigheraddresseswithinaclassobject.Theorderofallocationofnon-staticdatamemberswithdifferentaccesscontrolisunspecified(Clause1

c++ - 动态捕获 CPU 和内存使用情况

我正在运行一个shell脚本来执行一个c++应用程序,它测量一个api的性能。我可以捕获api的延迟(返回一组给定参数的值所花费的时间),但我也希望以5-10秒的间隔捕获cpu和内存使用情况。有没有一种方法可以做到这一点,而不会过多地影响系统的性能,并且在同一个脚本中也是如此?我发现了很多例子,其中可以在我们正在运行的脚本之外(独立地)做;但不是我们可以在同一个脚本中完成的。 最佳答案 如果您正在寻找动态捕获整个linux机器的CPU和内存利用率,那么以下命令也可以帮助您:中央处理器vmstat-n1510|awk'{now=str

c++ - 内存屏障/栅栏的开销

我目前正在编写C++代码并在我的代码中使用了很多内存屏障/栅栏。我知道,MB告诉编译器和硬件不要重新排序围绕它的写入/读取。但我不知道这个操作在运行时对处理器来说有多复杂。我的问题是:这种屏障的运行时开销是多少?我没有用谷歌找到任何有用的答案......开销可以忽略不计吗?或者导致大量使用MB导致严重的性能问题?最好的问候。 最佳答案 与算术和“正常”指令相比,我知道这些指令非常昂贵,但没有数字来支持该声明。我喜欢jalf的回答,描述了指令的效果,并想补充一点。通常存在几种不同类型的障碍,因此了解它们之间的差异可能会有所帮助。在清除

如何用Visual Studio自带工具分析内存泄漏?

首先用vsattach到进程,再点调试--窗口--显示诊断工具。注意:高能来了!!如果用调试--性能探测器去附加进程,则内存使用率这一项是灰的,无法勾选,但是用先attach,再显示诊断工具就可以分析内存,所以无论何时,都只用先附加进程,再显示诊断工具这一种方法!切到内存使用率选项卡,启用堆分析,然后截取两个时间点的快照,快照1和快照2,点击快照2,点查看堆:然后在与基线进行比较中,选择快照1:可以看到有两个选项卡,类型和堆栈,首先看类型,主要关注计数差异,和大小差异,计数差异为2,是指有两次分配没有释放,大小差异为15字节,是指这两次分配一共15字节,然后可以双击第一行,点进去:可以看到两次